var createError = require('http-errors');//http-errors 记录http异常
var express = require('express'); //引入express  里面包含API
var path = require('path');  // 内置模块 无需安装
var cookieParser = require('cookie-parser'); //处理cookies
var logger = require('morgan');  // 记录服务器日志




//路由配置文件
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var commentRouter = require('./routes/comment');
var vueRouter = require('./routes/vue');
var luckyRouter = require("./routes/lucky")


var connection = require('./utils/connect');//与数据库建立连接

var app = express();

var session = require('express-session')

var cors = require('cors');//此种解决跨域太粗暴，完全暴露，没有设置权限
app.use(cors({
  "origin": "*",
  "methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
  "preflightContinue": false,
  "optionsSuccessStatus": 204
}))
// app.all("/",(req,res,next)=>{
//     res.header('Access-Control-Allow-Origin', '*');
//     next();
// })


// view engine setup
app.set('views', path.join(__dirname, 'views'));  //设置项目视图文件目录  _dirname 根目录  把views文件夹重置根路径

app.set('view engine', 'ejs');//设置模板引擎 ejs

app.use(logger('dev'));  //日志记录中间件（封装的强大函数：很多地方通用的函数）
app.use(express.json());//处理post 请求提交的参数（数据），application/json  JSON格式的参数
app.use(express.urlencoded({ extended: false }));//处理post 请求提交的参数（数据），application/x-www-urlencoded  字符串格式的参数
app.use(cookieParser());  // 处理 cookies
app.use(express.static(path.join(__dirname, 'public')));// express.static 设置项目静态文件目录 以文件名读取  把public 重置 到根路径




// session 中间件  必须写在路由中间件前面  (用来保存用户登录后的所有数据)
app.use(session({
  name:"AppTest",
  cookie:{maxAge:1000*60*60},  // session 时长 现在是一个小时
  secret:"test",
  resave:false,
  saveUninitialized:true
}))




// 设置路由中间件 
app.use('/', indexRouter);
app.use('/users', usersRouter);//第一个参数是路由别名，为了区分不同的路由模块，也就是地址栏中药加入路由别名，后面才会加path;
app.use('/comment',commentRouter);
app.use('/vue',vueRouter);
app.use("/lucky",luckyRouter)

// catch 404 and forward to error handler

app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);// 500 服务器异常 
  res.render('error');// res.render 渲染 ejs 模板（模板页面）
});

module.exports = app;
